// // 引入 reflect-metadata 库
// import "reflect-metadata";
// import express, { Request, Response } from "express";

// const app = express();
// app.use(express.json());

// function getParamNames(func: Function): string[] {
//   const STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;
//   const ARGUMENT_NAMES = /([^\s,]+)/g;
//   const fnStr = func.toString().replace(STRIP_COMMENTS, "");
//   const result = fnStr
//     .slice(fnStr.indexOf("(") + 1, fnStr.indexOf(")"))
//     .match(ARGUMENT_NAMES);
//   if (result === null) return [];
//   return result.map((name) => name.trim());
// }

// //使用express接收请求实现装饰器GetMapping
// const GetMapping = (path: string): MethodDecorator => {
//   return (
//     target: Object,
//     key: string | symbol,
//     descriptor: PropertyDescriptor
//   ) => {
//     const fnc: Function = descriptor.value;
//     //获取fnc函数的参数名称列表
//     const paramNames = getParamNames(fnc);
//     app.get(path, (req: Request, res: Response) => {
//       try {
//         const reqParam = { ...req.params, ...req.query };
//         let params = [];
//         for (let i = 0; i < paramNames.length; i++) {
//           params.push(reqParam[paramNames[i]]);
//         }
//         const result = fnc.call(target, ...params, res);
//         res.status(200).send(result);
//       } catch (error) {
//         console.error();
//         if (error instanceof Error) {
//           res.status(500).send(error.message);
//         }
//         res.status(500).send(error);
//       }
//     });
//   };
// };

import { RestController, GetMapping, PostMapping } from "../decorator";

interface User {
  email: string;
  id: string;
  name: string;
}

@RestController("/aa")
class HelloController {
  constructor() {
    console.log("HelloController constructor");
  }

  @GetMapping("/user1")
  getUser(id: string, b: string) {
    console.log(id);
    // 格式化输出字符串
    return `id: ${id}, b: ${b}`;
    // throw new Error("error11222");
  }

  @GetMapping("/redirect")
  redirect() {
    return "redirect:http://www.baidu.com";
  }

  @PostMapping("/save")
  saveUser(id: string, user: User) {
    console.log(id);
    console.log(user);
    return user;
  }
}

// export default new HelloController();
export default HelloController;
